package DAO;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import TO.UsuarioTO;

public class UsuarioDAO {
	
	private static SessionFactory fabrica;
	
	public UsuarioDAO(){
		fabrica = new Configuration().configure("TO/hibernate.cfg.xml").buildSessionFactory();
	}
	
	public boolean inserir(UsuarioTO edicao) {
			
		try {
			Session sessao = fabrica.openSession();
						
			Transaction transaction = sessao.beginTransaction();
			sessao.save(edicao);
			
			transaction.commit();
			sessao.close();
			
			return true;
			
		} catch(Exception e){
			System.out.println(e.getMessage());
			return false;
		}		
		
	}
	
	public boolean editar(UsuarioTO edicao) {
		
		try {
			Session sessao = fabrica.openSession();
						
			Transaction transaction = sessao.beginTransaction();
			sessao.update(edicao);
			
			transaction.commit();
			sessao.close();
			
			return true;
			
		} catch(Exception e){
			System.out.println(e.getMessage());
			return false;
		}		
		
	}
	
	public boolean deletar(UsuarioTO edicao) {
		
		try {
			Session sessao = fabrica.openSession();
						
			Transaction transaction = sessao.beginTransaction();
			sessao.delete(edicao);
			
			transaction.commit();
			sessao.close();
			
			return true;
			
		} catch(Exception e){
			System.out.println(e.getMessage());
			return false;
		}		
		
	}
	
	public static Collection<UsuarioTO>  consultar(String nome){
		 
		Collection<UsuarioTO> list = new ArrayList<UsuarioTO>(); 
		try {
		    Session session = fabrica.openSession();     
		    
		    Query q = session.createQuery("from UsuarioTO u where u.nome = :nome");
		    q.setString("codigo", nome);
		    		    
		    list = q.list();  
		    session.flush();     
		    session.close(); 
			
		} catch(Exception e)
			{System.out.println(e.getMessage());
		}
		
		return list;
	}
	
	public static Collection<UsuarioTO>  logar(String nome, String senha){
		 
		Collection<UsuarioTO> list = new ArrayList<UsuarioTO>(); 
		try {
		    Session session = fabrica.openSession();     
		    
		    Query q = session.createQuery("from UsuarioTO u where u.nome = :nome AND u.senha = senha" );
		    q.setString("codigo", nome);
		    q.setString("senha", senha);
		    
		    list = q.list();  
		    session.flush();     
		    session.close(); 
			
		} catch(Exception e)
			{System.out.println(e.getMessage());
		}
		
		return list;
	}
	
	
	/*public int atualizarSenha(String prontuario, String senha, String senhanova) {
		Connection con=null;
		Statement stmt =null;
		int result = 0;
		String comando = "UPDATE USUARIOS SET SENHA = '" + senhanova +
							"' WHERE PRONTUARIO = '" + prontuario + "' AND SENHA = '"
							+ senha + "'";
		try {
			con=ConnectionDAO.getInstance().getConnection();
			stmt = con.createStatement();
			result = stmt.executeUpdate(comando);
		} catch(Exception e){System.out.println(e.getMessage());}
		finally {
			ConnectionDAO.getInstance().devolveConnection(con);
			try{stmt.close();}catch(Exception ee){};
		}
		
		return result;
	}
	
	
	public static Collection<UsuarioTO>  consultar(){
		
		Connection con=null;
		Statement stmt =null;
		
		Collection<UsuarioTO> list = new ArrayList<UsuarioTO>();
		String comando = "SELECT * FROM USUARIOS";
		try {
			con=ConnectionDAO.getInstance().getConnection();
			stmt = con.createStatement();
			ResultSet rs = stmt.executeQuery(comando);		// usado para fazer consultas ao banco
			while(rs.next()) {
				UsuarioTO usuario = new UsuarioTO();
				usuario.setProntuario(rs.getString("PRONTUARIO"));
				usuario.setSenha(rs.getString("SENHA"));
				usuario.setNome(rs.getString("NOME"));
				usuario.setTipo(rs.getInt("TIPO"));
				usuario.setEndereco(rs.getString("ENDERECO"));
				usuario.setCidade(rs.getString("CIDADE"));
				usuario.setEstado(rs.getString("ESTADO"));
				usuario.setCep(rs.getString("CEP"));
				usuario.setTelefone(rs.getString("TELEFONE"));
				usuario.setEmail(rs.getString("EMAIL"));
				usuario.setCelular(rs.getString("CELULAR"));
				list.add(usuario);
			}
		} catch(Exception e){System.out.println(e.getMessage());}
		finally {
			ConnectionDAO.getInstance().devolveConnection(con);
			try{stmt.close();}catch(Exception ee){};
		}
		
		return list;
	}
	
	public UsuarioTO  consultarProntuario(String prontuario){
		UsuarioTO usuario=null;
		Connection con=null;
		Statement stmt =null;
		
		String comando = "SELECT * FROM USUARIOS WHERE PRONTUARIO ='"+prontuario+"'";
		
		try {
			con=ConnectionDAO.getInstance().getConnection();
			stmt = con.createStatement();
			ResultSet rs = stmt.executeQuery(comando);		// usado para fazer consultas ao banco
			if(rs.next()) {
				usuario = new UsuarioTO();
				usuario.setProntuario(rs.getString("PRONTUARIO"));
				usuario.setSenha(rs.getString("SENHA"));
				usuario.setNome(rs.getString("NOME"));
				usuario.setTipo(rs.getInt("TIPO"));
				usuario.setEndereco(rs.getString("ENDERECO"));
				usuario.setCidade(rs.getString("CIDADE"));
				usuario.setEstado(rs.getString("ESTADO"));
				usuario.setCep(rs.getString("CEP"));
				usuario.setTelefone(rs.getString("TELEFONE"));
				usuario.setEmail(rs.getString("EMAIL"));
				usuario.setCelular(rs.getString("CELULAR"));
			}
		} catch(Exception e){System.out.println(e.getMessage());}
		finally {
			ConnectionDAO.getInstance().devolveConnection(con);
			try{stmt.close();}catch(Exception ee){};
		}
		
		return usuario;
	}
	
	public static Collection<UsuarioTO>  consultarNome(String nome){
		Connection con=null;
		Statement stmt =null;
		
		Collection<UsuarioTO> list = new ArrayList<UsuarioTO>();
		String comando = "SELECT * FROM USUARIOS WHERE PRONTUARIO LIKE '%"+nome+"%'";
		try {
			con=ConnectionDAO.getInstance().getConnection();
			stmt = con.createStatement();
			ResultSet rs = stmt.executeQuery(comando);		// usado para fazer consultas ao banco
			while(rs.next()) {
				UsuarioTO usuario = new UsuarioTO();
				usuario.setProntuario(rs.getString("PRONTUARIO"));
				usuario.setSenha(rs.getString("SENHA"));
				usuario.setNome(rs.getString("NOME"));
				usuario.setTipo(rs.getInt("TIPO"));
				usuario.setEndereco(rs.getString("ENDERECO"));
				usuario.setCidade(rs.getString("CIDADE"));
				usuario.setEstado(rs.getString("ESTADO"));
				usuario.setCep(rs.getString("CEP"));
				usuario.setTelefone(rs.getString("TELEFONE"));
				usuario.setEmail(rs.getString("EMAIL"));
				usuario.setCelular(rs.getString("CELULAR"));
				list.add(usuario);
			}
		} catch(Exception e){System.out.println(e.getMessage());}
		finally {
			ConnectionDAO.getInstance().devolveConnection(con);
			try{stmt.close();}catch(Exception ee){};
		}
		
		return list;
	}
*/
}
